#ifndef __SEU_EXTERNAL_H__
#define __SEU_EXTERNAL_H__
#include "seuos.h"
#include "seu_config.h"

/**
 *maibox struct config 
*/
#if (SEU_MBOX_MAX > 0)
typedef struct __SEU_MBOX
{
    seu_uint8_t     mbox_pdata;
    seu_uint32_t    mbox_datalen;
}SEU_MBOX;
#endif


/**
 *timer struct config 
*/
#if (SEU_TIMER_MAX > 0)
typedef enum
{
    TIMER_ONECE,
    TIMER_FREQUENCY,
}seu_timer_type;

typedef struct __SEU_TIMER_PARAM
{
    int vect;
    void *config;
}SEU_TIMER_PARAM;

typedef struct __SEU_TIMER_OPS
{
    void (*seu_timer_handler_set)(seu_uint8_t id, seu_handler_t handler);
    void (*seu_timer_reload_set)(seu_uint8_t id, seu_uint32_t ticks);
    void (*seu_timer_count_set)(seu_uint8_t id, seu_uint32_t ticks);
    seu_uint32_t (*seu_timer_count_get)(seu_uint8_t id);
}SEU_TIMER_OPS;

typedef struct __SEU_TIMER
{
    seu_timer_type          timer_flag;
    seu_uint8_t             statue;
    seu_uint32_t            timer_reload;
    seu_uint32_t            timer_count;
    seu_handler_t           timer_handler;
    SEU_TIMER_PARAM         timer_param;
    struct __SEU_TIMER_OPS           *timer_ops;
}SEU_TIMER;

extern SEU_TIMER seu_timer[SEU_TIMER_MAX];

#endif

#if (SEU_FLAG_MAX > 0)
#if (SEU_FLAG_MAX % 8 == 0)
extern seu_uint8_t seu_flag[SEU_FLAG_MAX/8];
#else
extern seu_uint8_t seu_flag[SEU_FLAG_MAX/8+1];
#endif
#endif

#if (SEU_MUTEX_MAX > 0)
extern seu_uint8_t seu_mutex[SEU_MUTEX_MAX];
#endif

#if (SEU_MBOX_MAX > 0)
extern SEU_MBOX seu_mbox[SEU_MBOX_MAX];
#endif
#endif

